package cn.vehicle.service;

import cn.vehicle.domains.bo.QueryCommonVehicleBo;
import cn.vehicle.domains.entity.CommonVehicleEntity;

import java.util.List;

/**
 * 普通车辆服务接口
 * <p>
 * 定义普通车辆的核心业务操作，包括新增、修改、删除、查询等。
 * 该接口作为业务层与持久层之间的抽象层，提供统一的数据访问规范。
 * </p>
 *
 * <p>主要职责：</p>
 * <ul>
 *   <li>定义普通车辆的增删改查方法；</li>
 *   <li>支持根据关联ID查询车辆信息；</li>
 *   <li>为 Biz 层提供车辆管理的标准化服务接口。</li>
 * </ul>
 */
public interface CommonVehicleService {

    /**
     * 新增普通车辆
     *
     * @param commonVehicleEntity 普通车辆实体对象
     */
    void addCommonVehicle(CommonVehicleEntity commonVehicleEntity);

    /**
     * 更新普通车辆信息
     *
     * @param updateEntity 更新后的车辆实体对象
     */
    void updateCommonVehicle(CommonVehicleEntity updateEntity);

    /**
     * 根据ID查询普通车辆信息
     *
     * @param id 普通车辆主键ID
     * @return 普通车辆实体对象
     */
    CommonVehicleEntity getCommonVehicleById(Long id);

    /**
     * 删除普通车辆
     *
     * @param id 普通车辆主键ID
     */
    void deleteCommonVehicle(Long id);

    /**
     * 查询普通车辆列表
     *
     * @param queryCommonVehicleBo 查询条件封装对象
     * @return 普通车辆实体列表
     */
    List<CommonVehicleEntity> selectCommonVehicleList(QueryCommonVehicleBo queryCommonVehicleBo);

    /**
     * 根据关联ID查询普通车辆信息
     *
     * @param id 关联ID（如运输车辆ID）
     * @return 普通车辆实体对象
     */
    CommonVehicleEntity getCommonVehicleByAssociationId(Long id);


    /**
     * 根据车牌查询普通车辆信息
     *
     * @param vehicleNumber 普通车辆车牌信息
     * @return 普通车辆实体对象
     */
    CommonVehicleEntity getCommonVehicleByVehicleNumber(String vehicleNumber);

}
